/** 线程切换
 * pthread_yield函数可以让调用该函数的线程让出cpu（就绪态），
 * 让其他线程也能运行。
 *
 * 在线程完成运行时，调用thread_yield可以把该线程的信息保存在线程表中；
 * 进而，它可以调用线程调度程序来选择另一个要运行的线程。
 */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <pthread.h>

#define MAX 5
// 全局变量
int number;

void* funcA_num(void* arg)
{
    for(int i = 0; i < MAX; ++i)
    {
       int cur = number;
       cur++;
       number = cur;
       printf("Thread A, id = %lu, number = %d\n", pthread_self(),number);
       pthread_yield();
    }
    return NULL;
}

void* funcB_num(void* arg)
{
    for(int i = 0; i < MAX; ++i)
    {
       int cur = number;
       cur++;
       number = cur;
       printf("Thread B, id = %lu, number = %d\n", pthread_self(),number);
       pthread_yield();
    }
    return NULL;
}

int main(int argc, const char* argv[])
{
    pthread_t p1,p2;
    pthread_create(&p1, NULL, funcA_num, NULL);
    pthread_create(&p2, NULL, funcB_num, NULL);
    pthread_join(p1,NULL);
    pthread_join(p2,NULL);
    return 0;

}
